/*
* 实现new的逻辑
* */
function myNew(func, ...args) {
  // 逻辑
  let obj = {};

  let result = func.call(obj, ...args);
  if (typeof result === 'object' || typeof result === 'function') {
    return result;
  }
  // 关联的关系
  obj.__proto__ = func.prototype;
  return obj;

}

// 类
function Dog(age) {
  this.age = age;
  // return 20; // 和类的返回值有关 如果返回值是引用数据类型 返回当前的值 基本 : 返回当前类的实例

  return {a:1}
}

// 类的原型方法 say
Dog.prototype.say = function () {
  console.log("汪汪汪");
};

//dog 是Dog 的实例
const dog = myNew(Dog, 20);
//
console.log(dog);

// console.log(dog.age);  // 2
// dog.say();     // 汪汪汪


// let myDog = new Dog(20);
// console.log(myDog); // undefined null 类的实例 20
//

